// utils/storage.js - 本地存储工具
/**
 * 存储数据到本地
 * @param {String} key 存储键名
 * @param {Any} data 要存储的数据
 * @param {Number} expireTime 过期时间（毫秒），可选
 */
function setStorage(key, data, expireTime = null) {
  try {
    const storageData = {
      data: data,
      timestamp: Date.now(),
      expireTime: expireTime ? Date.now() + expireTime : null
    }
    wx.setStorageSync(key, storageData)
    return true
  } catch (error) {
    console.error('存储数据失败:', error)
    return false
  }
}

/**
 * 从本地获取数据
 * @param {String} key 存储键名
 * @param {Any} defaultValue 默认值
 */
function getStorage(key, defaultValue = null) {
  try {
    const storageData = wx.getStorageSync(key)
    if (!storageData) {
      return defaultValue
    }

    // 检查是否过期
    if (storageData.expireTime && Date.now() > storageData.expireTime) {
      wx.removeStorageSync(key)
      return defaultValue
    }

    return storageData.data
  } catch (error) {
    console.error('获取存储数据失败:', error)
    return defaultValue
  }
}

/**
 * 删除存储的数据
 * @param {String} key 存储键名
 */
function removeStorage(key) {
  try {
    wx.removeStorageSync(key)
    return true
  } catch (error) {
    console.error('删除存储数据失败:', error)
    return false
  }
}

/**
 * 清空所有存储数据
 */
function clearStorage() {
  try {
    wx.clearStorageSync()
    return true
  } catch (error) {
    console.error('清空存储数据失败:', error)
    return false
  }
}

/**
 * 获取存储信息
 */
function getStorageInfo() {
  try {
    return wx.getStorageInfoSync()
  } catch (error) {
    console.error('获取存储信息失败:', error)
    return null
  }
}

/**
 * 搜索历史管理
 */
const searchHistory = {
  key: 'searchHistory',
  maxCount: 10,

  // 添加搜索记录
  add(keyword, type) {
    const history = this.get()
    
    // 移除重复项
    const filteredHistory = history.filter(item => 
      !(item.keyword === keyword && item.type === type)
    )
    
    // 添加新记录到开头
    filteredHistory.unshift({
      keyword: keyword,
      type: type,
      time: this.formatTime(new Date()),
      timestamp: Date.now()
    })
    
    // 只保留最近的记录
    const limitedHistory = filteredHistory.slice(0, this.maxCount)
    
    setStorage(this.key, limitedHistory)
    return limitedHistory
  },

  // 获取搜索历史
  get() {
    return getStorage(this.key, [])
  },

  // 清空搜索历史
  clear() {
    return removeStorage(this.key)
  },

  // 删除指定记录
  remove(keyword, type) {
    const history = this.get()
    const filteredHistory = history.filter(item => 
      !(item.keyword === keyword && item.type === type)
    )
    setStorage(this.key, filteredHistory)
    return filteredHistory
  },

  // 格式化时间
  formatTime(date) {
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    return `${month}-${day} ${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`
  }
}

/**
 * 用户偏好设置管理
 */
const userPreferences = {
  key: 'userPreferences',

  // 设置偏好
  set(preferences) {
    const current = this.get()
    const updated = { ...current, ...preferences }
    setStorage(this.key, updated)
    return updated
  },

  // 获取偏好
  get() {
    return getStorage(this.key, {
      defaultSearchType: 'code', // 默认搜索类型
      showTips: true, // 是否显示使用提示
      autoSave: true, // 是否自动保存搜索历史
      theme: 'light' // 主题设置
    })
  },

  // 获取单个偏好设置
  getValue(key, defaultValue = null) {
    const preferences = this.get()
    return preferences[key] !== undefined ? preferences[key] : defaultValue
  },

  // 设置单个偏好
  setValue(key, value) {
    const preferences = this.get()
    preferences[key] = value
    setStorage(this.key, preferences)
    return preferences
  }
}

/**
 * 缓存管理
 */
const cache = {
  // 缓存优惠券数据
  setTicketCache(ticketId, data, expireTime = 5 * 60 * 1000) { // 默认5分钟过期
    setStorage(`ticket_${ticketId}`, data, expireTime)
  },

  // 获取优惠券缓存
  getTicketCache(ticketId) {
    return getStorage(`ticket_${ticketId}`)
  },

  // 缓存商家数据
  setMerchantCache(merchantId, data, expireTime = 10 * 60 * 1000) { // 默认10分钟过期
    setStorage(`merchant_${merchantId}`, data, expireTime)
  },

  // 获取商家缓存
  getMerchantCache(merchantId) {
    return getStorage(`merchant_${merchantId}`)
  },

  // 缓存搜索结果
  setSearchCache(keyword, type, data, expireTime = 2 * 60 * 1000) { // 默认2分钟过期
    const cacheKey = `search_${type}_${keyword}`
    setStorage(cacheKey, data, expireTime)
  },

  // 获取搜索结果缓存
  getSearchCache(keyword, type) {
    const cacheKey = `search_${type}_${keyword}`
    return getStorage(cacheKey)
  },

  // 清空所有缓存
  clearAll() {
    const info = getStorageInfo()
    if (info && info.keys) {
      info.keys.forEach(key => {
        if (key.startsWith('ticket_') || key.startsWith('merchant_') || key.startsWith('search_')) {
          removeStorage(key)
        }
      })
    }
  }
}

module.exports = {
  setStorage,
  getStorage,
  removeStorage,
  clearStorage,
  getStorageInfo,
  searchHistory,
  userPreferences,
  cache
}
